<

TargetPlatform 列挙型に「linux」と「windows」を追加

まとめ

2 つの新しい値が追加されました。TargetPlatform列挙型 switch ステートメントに追加のケースが必要になる可能性があります。 スイッチを入れるTargetPlatformを含めないでくださいdefault:場合。

コンテクスト

この変更の前は、TargetPlatformenum には 4 つの値しか含まれていませんでした。 そして次のように定義されました。

enum TargetPlatform {
  android,
  fuchsia,
  iOS,
  macOS,
}

switchステートメントはこれらのケースを処理するためにのみ必要です。 Linux 上で実行したいデスクトップ アプリケーションや Windows には通常、次のようなテストが含まれていました。main()方法:

// Sets a platform override for desktop to avoid exceptions. See
// https://docs.flutter.dev/desktop#target-platform-override for more info.
void _enablePlatformOverrideForDesktop() {
  if (!kIsWeb && (Platform.isWindows || Platform.isLinux)) {
    debugDefaultTargetPlatformOverride = TargetPlatform.fuchsia;
  }
}

void main() {
  _enablePlatformOverrideForDesktop();
  runApp(MyApp());
}

変更内容の説明

TargetPlatformenum は次のように定義されるようになりました。

enum TargetPlatform {
  android,
  fuchsia,
  iOS,
  linux, // new value
  macOS,
  windows, // new value
}

そしてプラットフォームテストの設定debugDefaultTargetPlatformOverridemain()Linux および Windows では必要なくなりました。

これにより、Dart アナライザーで次のような結果が得られる可能性があります。missing_enum_constant_in_switchに対する警告 を含まない switch ステートメントdefault場合。 なしでスイッチを書き込むdefault:ケースは アナライザー以来、列挙型を処理する推奨方法 処理されていないケースを見つけるのに役立ちます。

移行ガイド

新しい列挙型に移行し、アナライザーのエラーを回避するにはmissing_enum_constant_in_switch次のようなエラーが表示されます。

warning: Missing case clause for 'linux'. (missing_enum_constant_in_switch at [package] path/to/file.dart:111)

または:

warning: Missing case clause for 'windows'. (missing_enum_constant_in_switch at [package] path/to/file.dart:111)

コードを次のように変更します。

移行前のコード:

void dance(TargetPlatform platform) {
  switch (platform) {
    case TargetPlatform.android:
      // Do Android dance.
      break;
    case TargetPlatform.fuchsia:
      // Do Fuchsia dance.
      break;
    case TargetPlatform.iOS:
      // Do iOS dance.
      break;
    case TargetPlatform.macOS:
      // Do macOS dance.
      break;
  }
}

移行後のコード:

void dance(TargetPlatform platform) {
  switch (platform) {
    case TargetPlatform.android:
      // Do Android dance.
      break;
    case TargetPlatform.fuchsia:
      // Do Fuchsia dance.
      break;
    case TargetPlatform.iOS:
      // Do iOS dance.
      break;
    case TargetPlatform.linux: // new case
      // Do Linux dance.
      break;
    case TargetPlatform.macOS:
      // Do macOS dance.
      break;
    case TargetPlatform.windows: // new case
      // Do Windows dance.
      break;
  }
}

持っているdefault:このような switch ステートメントの case はそうではありません。 アナライザーは検出に役立ちませんので、推奨します。 処理する必要があるすべてのケース。

また、上記で参照したようなテストで、debugDefaultTargetPlatformOverrideもう必要ありません Linux および Windows アプリケーション用。

タイムライン

リリースされたバージョン: 1.15.4
安定版リリース: 1.17

参考文献

API ドキュメント:

  • TargetPlatform

関連する問題:

  • 問題 #31366

関連する PR:

  • Windows および Linux をターゲットプラットフォームとして追加